const jwt = require("jsonwebtoken");
const cart = require("../sql/cart");
const sql = require("../sql");
const goods = require("../sql/goods");

module.exports = (req,res)=>{
    const token = req.query.token;
    jwt.verify(token, "杨树林er", (err, tokenData)=>{
        if(err){
            res.send({code:0, msg:"登录失效"});
        }else{
            // 根据用户信息获取购物车数据：[{username, cartId, goodsData:[{}]}]
            sql.get({
                colObj: cart,
                where:{username: tokenData.username}
            }).then(cartData=>{
                if(cartData.length > 0){
                    // 保存购物车信息中的商品信息部分：[{goodsId, num}, {goodsId, num}]
                    const goodsData = cartData[0].goodsData;
                    // 因为有异步存在，使用了async和await后，得到所有异步请求的promise实例：everyGoodsDetailP
                    const everyGoodsDetailP =  goodsData.map(async val=>{
                        // 获取购物车信息中的每个商品id，根据商品id获取商品详情
                        return await sql.get({
                            colObj: goods,
                            where: {goodsId: val.goodsId}
                        })
                    })
                    // 利用Promise的all方法批处理everyGoodsDetailP中所有的异步
                    Promise.all(everyGoodsDetailP).then(everyGoodsDetail=>{
                        const resGoodsData = [];
                        // 所有的everyGoodsDetailP实例请求成功后的数据：每个商品的详情数据
                        everyGoodsDetail.forEach(val=>{
                            // 从购物车信息的商品信息中找到对应商品的数量，对应的添加到新数组中：resGoodsData
                            goodsData.forEach((val2)=>{
                                if(val[0].goodsId === val2.goodsId){
                                    resGoodsData.push({
                                        goodsId:val[0].goodsId,
                                        goodsName:val[0].goodsName,
                                        goodsImg:val[0].goodsImg,
                                        price:val[0].price,
                                        discount:val[0].discount,
                                        num: val2.num,
                                        check: val2.check
                                    })
                                }
                            })
                        })
                        // 向前端响应，处理完成后的商品数据：resGoodsData
                        res.send({code:1, msg:"获取成功", data: resGoodsData})
                    })
                }else{
                    res.send({code:1,msg:"购物车为空",data:[]});
                }
            })
        }
    })
}

